import { Howl } from 'howler';

/**
 * 全局音频管理器
 * 用于统一管理音频播放，绕过 iOS 用户交互限制
 */
class AudioManager {
  constructor() {
    this.bgmMain = null; // 主背景音乐
    this.bgmAmbient = null; // 环境音效
    this.mainVolume = 0.8; // 主音乐音量
    this.ambientVolume = 0.1; // 环境音音量
    this.isPlaying = false; // 是否正在播放
    this.isInitialized = false; // 是否已初始化
    this.callbacks = {
      onPlay: null, // 播放回调
      onEnd: null, // 结束回调
      onPause: null, // 暂停回调
    };
  }

  /**
   * 初始化音频（延迟加载，不立即创建）
   */
  init() {
    if (this.isInitialized) {
      return;
    }

    // 主背景音乐
    this.bgmMain = new Howl({
      src: ['https://web-zy.obs.cn-east-3.myhuaweicloud.com/xsc-dl/zhuben_dlj.mp3'],
      volume: this.mainVolume,
      loop: true, // 开启循环
      html5: true,
      preload: false, // 延迟加载，在用户交互时再加载
      onend: () => {
        console.log('音频播放结束事件触发');
        this.isPlaying = false;
        if (this.callbacks.onEnd) {
          this.callbacks.onEnd();
        }
      },
      onplay: () => {
        console.log('主音乐开始播放');
        this.isPlaying = true;
        if (this.callbacks.onPlay) {
          this.callbacks.onPlay();
        }
      },
      onloaderror: (id, error) => {
        console.error('主音乐加载失败:', error);
      },
      onplayerror: (id, error) => {
        console.error('主音乐播放失败:', error);
      }
    });

    // 环境音
    this.bgmAmbient = new Howl({
      src: ['https://web-zy.obs.cn-east-3.myhuaweicloud.com/xsc-dl/21.MP3'],
      loop: true, // 开启循环
      volume: this.ambientVolume,
      html5: true,
      preload: false, // 延迟加载
      onloaderror: (id, error) => {
        console.error('环境音加载失败:', error);
      },
      onplayerror: (id, error) => {
        console.error('环境音播放失败:', error);
      }
    });

    this.isInitialized = true;
    console.log('音频管理器初始化完成');
  }

  /**
   * 播放音频（在用户交互时调用，绕过 iOS 限制）
   */
  play() {
    if (!this.isInitialized) {
      this.init();
    }

    try {
      // 在用户交互的上下文中立即加载和播放
      // 先加载音频（在用户交互的上下文中）
      const loadAndPlay = () => {
        // 加载音频
        if (this.bgmMain && (!this.bgmMain.state() || this.bgmMain.state() === 'unloaded')) {
          this.bgmMain.load();
        }
        if (this.bgmAmbient && (!this.bgmAmbient.state() || this.bgmAmbient.state() === 'unloaded')) {
          this.bgmAmbient.load();
        }

        // 立即尝试播放（在用户交互上下文中）
        // 先播放环境音
        if (this.bgmAmbient && !this.bgmAmbient.playing()) {
          this.bgmAmbient.volume(this.ambientVolume);
          const ambientId = this.bgmAmbient.play();
          if (!ambientId) {
            // 如果播放失败，延迟重试
            setTimeout(() => {
              this.bgmAmbient.volume(this.ambientVolume);
              this.bgmAmbient.play();
            }, 100);
          }
        }

        // 延迟播放主音乐，避免同时播放冲突
        setTimeout(() => {
          if (this.bgmMain && !this.bgmMain.playing()) {
            this.bgmMain.volume(this.mainVolume);
            const mainId = this.bgmMain.play();
            if (!mainId) {
              // 如果播放失败，延迟重试
              setTimeout(() => {
                this.bgmMain.volume(this.mainVolume);
                this.bgmMain.play();
              }, 100);
            }
          }
        }, 100);

        // 再次确保音量设置
        setTimeout(() => {
          if (this.bgmMain) {
            this.bgmMain.volume(this.mainVolume);
          }
          if (this.bgmAmbient) {
            this.bgmAmbient.volume(this.ambientVolume);
          }
        }, 300);
      };

      // 立即执行（在用户交互上下文中）
      loadAndPlay();
    } catch (error) {
      console.error('播放音频异常:', error);
      // 如果出错，延迟重试
      setTimeout(() => {
        this.play();
      }, 500);
    }
  }

  /**
   * 暂停播放
   */
  pause() {
    if (this.bgmMain && this.bgmMain.playing()) {
      this.bgmMain.pause();
    }
    if (this.bgmAmbient && this.bgmAmbient.playing()) {
      this.bgmAmbient.pause();
    }
    this.isPlaying = false;
    if (this.callbacks.onPause) {
      this.callbacks.onPause();
    }
  }

  /**
   * 停止播放
   */
  stop() {
    if (this.bgmMain) {
      this.bgmMain.stop();
    }
    if (this.bgmAmbient) {
      this.bgmAmbient.stop();
    }
    this.isPlaying = false;
  }

  /**
   * 设置播放回调
   */
  setCallbacks(callbacks) {
    this.callbacks = { ...this.callbacks, ...callbacks };
  }

  /**
   * 获取播放状态
   */
  getPlayingState() {
    return {
      isPlaying: this.isPlaying,
      mainPlaying: this.bgmMain ? this.bgmMain.playing() : false,
      ambientPlaying: this.bgmAmbient ? this.bgmAmbient.playing() : false,
    };
  }

  /**
   * 销毁音频资源
   */
  destroy() {
    if (this.bgmMain) {
      this.bgmMain.stop();
      this.bgmMain.unload();
      this.bgmMain = null;
    }
    if (this.bgmAmbient) {
      this.bgmAmbient.stop();
      this.bgmAmbient.unload();
      this.bgmAmbient = null;
    }
    this.isInitialized = false;
    this.isPlaying = false;
  }
}

// 创建单例
const audioManager = new AudioManager();

export default audioManager;

